package org.finesys.system.service;

import java.util.List;

import org.finesys.common.core.module.R;
import org.finesys.common.mp.core.service.BaseService;
import org.finesys.system.api.dto.DeptDTO;
import org.finesys.system.api.entity.SysDept;
import org.finesys.system.api.vo.DeptExcelVO;
import org.springframework.validation.BindingResult;

import cn.hutool.core.lang.tree.Tree;

public interface SysDeptService extends BaseService<SysDept> {

    /**
     * 获取部门树
     */
    List<DeptDTO> getDeptTree();

    /**
     * 获取部门树
     */
    List<DeptDTO> getUserDeptTree();

    /**
     * 根据id删除部门
     */
    Boolean deleteById(Long id);

    /**
     * 保存部门信息
     */
    Boolean addDept(DeptDTO deptDTO);


    /**
     * 根据id查询dept
     *
     * @param id deptId
     * @return dept
     */
    DeptDTO getDeptById(Long id);

    /**
     * 根据id更新部门
     *
     * @param deptDTO deptDto
     * @return 是否更新成功
     */
    Boolean updateById(DeptDTO deptDTO);

    /**
     * 查询id下的子部门信息
     */
    List<DeptDTO> findChildDepts(long deptId);

    /**
     * 获取当前用户部门(包含父级)
     *
     * @return 用户所处部门
     */
    String getDeptNameByUserId();


    /**
     * 查询部门树菜单
     *
     * @param deptName 部门名称
     * @return 树
     */
    List<Tree<Long>> selectTree(String deptName);


    /**
     * 清除缓存
     */
    R<?> sync();

    /**
     * 导入部门
     *
     * @param excelVOList   部门列表
     * @param bindingResult 错误信息列表
     * @return ok fail
     */
    R<?> importExcel(List<DeptExcelVO> excelVOList, BindingResult bindingResult);

    /**
     * 导出excel 表格
     *
     * @return
     */
    List<DeptExcelVO> listDept();
}
